package ProjectoX;

import java.util.Random;

public class Mapa {

	protected Pantalla miPantalla;
	protected TraductorDeArchivo miTraductor;
	protected Componente [] [] matrizDeComponentes;
	protected Personaje [] [] matrizDeEnemigos;
	protected Nivel miNivel;
	final protected int NFilas = 10;
	final protected int NColumnas = 250;
	final protected int AltoC = 50;
	final protected int AnchoC = 50;
	
	public Mapa (Nivel N) {
		miNivel = N;
		miPantalla = new Pantalla();
		miTraductor = new TraductorDeArchivo();
		inicializarMatriz();
	}
	
	private void inicializarMatriz() {
		matrizDeComponentes = new Componente [NColumnas][NFilas];
		matrizDeEnemigos = new Personaje [NColumnas][NFilas];
		char [] [] MatrizAux = miTraductor.getMatriz();
		for (int i = 0; i<NColumnas; i++)
			for (int j = 0; j<NFilas; j++)
				switch (MatrizAux[i][j]) {
					case '-': matrizDeComponentes[i][j] = null; 
		  		  			  matrizDeEnemigos[i][j] = null;
		  		  			break;	
					case 'r': matrizDeComponentes[i][j] = new PiedraRompible(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, '4');
							  matrizDeEnemigos[i][j] = null;
							break;
					case 'b': matrizDeComponentes[i][j] = new PiedraBomba(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i);
					  		  matrizDeEnemigos[i][j] = null;
					  		break;
					case 'v': matrizDeComponentes[i][j] = new PiedraVida(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i);
			  		  		  matrizDeEnemigos[i][j] = null;
			  		  		  break;
					case 'e': matrizDeComponentes[i][j] = new PiedraEstrella(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i);
					  		  matrizDeEnemigos[i][j] = null;
					  		break;
					case 'c': matrizDeComponentes[i][j] = new PiedraPowerUp(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i);
							  matrizDeEnemigos[i][j] = null;
							break;
					case 'm': Random rand = new Random();
							  int x = rand.nextInt(5);
							  x++;
							  matrizDeComponentes[i][j] = new PiedraMoneda(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, x);
					  		  matrizDeEnemigos[i][j] = null;
					  		break;
					case 'n': matrizDeComponentes[i][j] = new Moneda(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, true);
							  matrizDeEnemigos[i][j] = null;
					  		  break;
					case 'g': matrizDeComponentes[i][j] = null; 
							  matrizDeEnemigos[i][j] = new Goomba(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC));
							break;		
					case 'k': matrizDeComponentes[i][j] = null; 
					  		  matrizDeEnemigos[i][j] = new KoopaTroopa(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC));
					  		break;	
					case 's' : matrizDeComponentes[i][j] = new PiedraInanimada(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, MatrizAux[i][j]);
							   matrizDeEnemigos[i][j] = null;
							break;
					case 'd' : matrizDeComponentes[i][j] = new PiedraInanimada(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, MatrizAux[i][j]);
							   matrizDeEnemigos[i][j] = null;
							break;
					case 'f' : matrizDeComponentes[i][j] = new PiedraInanimada(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, MatrizAux[i][j]);
					   		   matrizDeEnemigos[i][j] = null;
					   		break;
					case 'q' : matrizDeComponentes[i][j] = new PiedraInanimada(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, MatrizAux[i][j]);
							   matrizDeEnemigos[i][j] = null;
							   break;
					default : matrizDeComponentes[i][j] = new Piedra(miNivel, new Posicion(i*AnchoC, 420-(j*AltoC), AnchoC, AltoC), 9-j,i, MatrizAux[i][j]);
							  matrizDeEnemigos[i][j] = null;
							break;
				}
	}

	public Pantalla getPantalla() {
		return miPantalla;
	}
	
	public Componente [] [] getComponentes() {
		return matrizDeComponentes;
	}
	
	public Personaje [] [] getEnemigos() {
		return matrizDeEnemigos;
	}
	
	public void borrarComponente (Componente C) {
		matrizDeComponentes[C.getColumna()][C.getFila()]=null;
	}

}
